import { defineStore } from 'pinia'

/**
 * 这个 第一个参数main，也称为 id，是必要的，Pinia 使用它来将 store 连接到 devtools。
 * 将返回的函数命名为use...（更好的语义化） 是跨可组合项的约定，以使其符合你的使用习惯。
 */
import { Child } from '@/type/merchant/goodsInfo'
export interface SelectGoodsList {
  key: string
  goodsId: string
  skuInfo: any
  skuItem: Child[]
  number: number
}

export const useOrderStore = defineStore('useOrderStore', {
  state: () => {
    return {
      goodsId: 123,
      selectGoods: [] as SelectGoodsList[],
    }
  },

  /**
   * 用来封装计算属性 有缓存功能  类似于computed
   */
  getters: {
    computePrice() {
      let count = 0
      this.selectGoods.forEach((v, i) => {
        count += v.number * v.skuInfo.price
      })

      return count.toFixed(2)
    },
  },

  /**
   * 编辑业务逻辑  类似于methods
   */
  actions: {
    addGoods(data: SelectGoodsList) {
      this.selectGoods.push(data)
    },

    /**
     * 根据key值找到已选择商品并删除
     * @param key
     */
    removeGoods(key: string) {
      this.selectGoods.filter((item, index) => {
        if (item.key === key) {
          this.selectGoods.splice(index, 1)
        }
      })
    },

    /**
     * 清空所有商品
     */
    clearAllGoods() {
      this.selectGoods = []
    },
  },

  persist: {
    enabled: true,
  },
})
